package com.sjz.service;


import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.content.Context;
import android.os.Environment;
/****
 * 文件保存服务类
 */
public class FileService {
	private Context context;
	
	public FileService(Context context) {
		this.context = context;
	}
  
	/****
	 * 保存到sdcard上  
	 * 特点  任何程序都可以读写文件  文件不受保护
	 * @param filename
	 * @param content
	 * @throws Exception
	 */
	public void saveToSDCard(String filename, String content)throws Exception {
//		File file = new File(Environment.getExternalStorageDirectory(), filename);
		File file = new File("/mnt/sdcard/", filename);
		FileOutputStream outStream = new FileOutputStream(file);
		outStream.write(content.getBytes());
		outStream.close();
	}
	/**
	 * 保存文件    使用私有模式  MODE_PRIVATE
	 * 特点   一、创建出来的文件只能被本应用访问，其它应用无法访问该文件，
	 *      二、另外采用私有操作模式创建的文件，写入文件中的内容会覆盖原文件的内容
	 * @param filename 文件名称
	 * @param content 文件内容
	 */
	public void save(String filename, String content) throws Exception {
		//私有操作模式：
		//第一个参数  文件名称   第二个参数  文件的模式   一追加还是覆盖  二、访问权限
		//通过上下文对象得到输入流
		FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
		outStream.write(content.getBytes());//使用的是默认的编码模式，可以设置编码模式
		outStream.close();
	}
	
	/**
	 * 保存文件   MODE_APPEND   追加模式
	 * 特点 一、创建出来的文件只能被本应用访问，其它应用无法访问该文件
	 *  二、 创建的文件，写入文件中的内容会覆盖原文件的内容
	 * @param filename 文件名称
	 * @param content 文件内容
	 */
	public void saveAppend(String filename, String content) throws Exception {//ctrl+shift+y / x
		FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_APPEND);
		outStream.write(content.getBytes());
		outStream.close();
	}
	
	/**
	 * 保存文件 MODE_WORLD_READABLE   可读模式
	 * 特点  一、可以被其他文件读取
	 * 二、写入文件中的内容会覆盖原文件的内容
	 * @param filename 文件名称
	 * @param content 文件内容
	 */
	public void saveReadable(String filename, String content) throws Exception {
		FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_READABLE );
		outStream.write(content.getBytes());
		outStream.close();
	}
	
	/**
	 * 保存文件MODE_WORLD_WRITEABLE   可写模式
	 * 特点 
	 * 一、创建出来的文件只能被本应用访问，其它应用无法访问该文件
	 * 二、写入文件中的内容会覆盖原文件的内容
	 * 三、可以被其他文件写入
	 * @param filename 文件名称
	 * @param content 文件内容
	 */
	public void saveWriteable(String filename, String content) throws Exception {
		FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE);
		outStream.write(content.getBytes());
		outStream.close();
	}
	
	/**
	 * 保存文件   读写模式  
	 * 特点
	 * 一、创建出来的文件可以被其他应用读和写
	 * 二、写入文件中的内容会覆盖原文件的内容 除非设置追加  
	 * @param filename 文件名称
	 * @param content 文件内容
	 */
	public void saveRW(String filename, String content) throws Exception {
		//私有操作模式：，另外采用私有操作模式创建的文件，
		FileOutputStream outStream = 
				context.openFileOutput(filename, Context.MODE_WORLD_WRITEABLE + Context.MODE_WORLD_READABLE);
		//第二个参数可以用3代替
		outStream.write(content.getBytes());
		outStream.close();
	}
	
	/**
	 * 读取文件内容
	 * @param filename 文件名称
	 * @return 文件内容
	 * @throws Exception
	 */
	public String read(String filename) throws Exception {
		FileInputStream inStream = context.openFileInput(filename);
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while((len = inStream.read(buffer)) != -1){
			outStream.write(buffer, 0, len);
		}
		byte[] data = outStream.toByteArray();
		return new String(data);
	}

}
